// https://www.acwing.com/problem/content/3305/

#include <iostream>
#include <vector>
#include <stack>
#include <unordered_map>
using namespace std;

stack<int> nums;
stack<char> opts;
unordered_map<char, int> opt_map = {
        {'+', 1}, {'-', 1},
        {'*', 2}, {'/', 2}
};

void eval() {
    int a = nums.top();
    nums.pop();

    int b = nums.top();
    nums.pop();

    char opt = opts.top();
    opts.pop();

    if (opt == '-') {
        nums.push(b-a);
    } else if (opt == '+') {
        nums.push(b+a);
    } else if (opt == '*') {
        nums.push(b*a);
    } else if (opt == '/') {
        nums.push(b/a);
    }
}

int main() {
    string str;
    cin>>str;
    for (int i=0; i<str.length(); i++) {
        if (isdigit(str[i])) {
            int x = 0;
            int j=i;
            while (j < str.length() && isdigit(str[j])) {
                x = x * 10 + str[j] - '0';
                j++;
            }
            nums.push(x);
            i = j-1;
        } else if (str[i] == '(') {
            opts.push(str[i]);
        } else if (str[i] == ')') {
            while (opts.top() != '(') {
                eval();
            }
            opts.pop();
        } else {
            while (!opts.empty() && opt_map[opts.top()] >= opt_map[str[i]]) {
                eval();
            }
            opts.push(str[i]);
        }
    }
    while (!opts.empty()) {
        eval();
    }
    cout<<nums.top()<<endl;
    return 0;
}
